﻿using System;
using System.Collections.Generic;
using System.Linq;
using LibQuestionIs.Enums;
using LibQuestionIs.Managers;
using LibQuestionIs.Models;
using NotificationsExtensions.ToastContent;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;

namespace Infos.InterviewApp.View
{

    public sealed partial class Esito : Infos.InterviewApp.Common.LayoutAwarePage
    {
        public Esito()
        {
            this.InitializeComponent();
        }

        protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
            PopupBacheca = new Popup()
            {
                Margin = new Thickness(100),
                VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Stretch,
                HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Stretch,
            };
            HeaderEsito headerEsito = new HeaderEsito()
            {
                Punteggio = DataFlowObject.EsitoPartita.Punteggio,
                TipologiaTest = DataFlowObject.TipologiaTest.NomeTest,
                TotaleRisposte = GetCalcoloPercentuale(DataFlowObject.EsitoPartita.ListaDomande),
                Moltiplicatore = DataFlowObject.MaxMoltiplicatore,
                SecondiRimanenti = Convert.ToInt32(DataFlowObject.EsitoPartita.TempoRimanente.TotalSeconds),
            };
            headerEsito.PunteggioConSecondi = headerEsito.Punteggio + headerEsito.SecondiRimanenti;

            GridHeaderEsito.DataContext = headerEsito;

            pageTitle.Text = headerEsito.TipologiaTest;
            this.DefaultViewModel["ListaDomande"] = DataFlowObject.EsitoPartita.ListaDomande;
            if (!DataFlowObject.IsRegistrato)
                await RegistrazionePunteggi();
        }

        #region Metodi Privati

        private static async System.Threading.Tasks.Task RegistrazionePunteggi()
        {
            bool isClassifica = await new ManagerRisultati().SetPunteggioPartita();
            if (isClassifica)
            {
                IToastNotificationContent toastContent = null;
                IToastText01 templateContent = ToastContentFactory.CreateToastText01();
                templateContent.TextBodyWrap.Text = string.Format("Complimenti sei entrato nella Top 10. Controlla nella sezione {0}", DataFlowObject.TipologiaTest.NomeTest);
                toastContent = templateContent;
                ToastNotification toast = toastContent.CreateNotification();
                ToastNotificationManager.CreateToastNotifier().Show(toast);
            }
            PunteggiXML punteggiXML = new PunteggiXML()
            {
                Moltiplicatore = DataFlowObject.MaxMoltiplicatore.ToString(),
                Punteggio = (DataFlowObject.EsitoPartita.Punteggio + Convert.ToInt32(DataFlowObject.EsitoPartita.TempoRimanente.TotalSeconds)).ToString(),
                SecondiRimanenti = DataFlowObject.EsitoPartita.TempoRimanente.TotalSeconds.ToString(),
                TipologiaTest = DataFlowObject.TipologiaTest.NomeTest,
            };
            new ManagerRoamingState().WritePunteggiXml(punteggiXML);

            DataFlowObject.IsRegistrato = true;
        }

        private int GetCalcoloPercentuale(List<SingolaDomanda> elencoDomande)
        {
            return (elencoDomande.Where(x => x.isCorretta == TypeRispostaDomanda.Corretta).Count() * 1000) / elencoDomande.Count;
        }

        private void RegistraPunteggio_Click(object sender, RoutedEventArgs e)
        {
            if (this.Frame != null)
                this.Frame.Navigate(typeof(MasterPage));
        }

        private void NuovaPartita_Click(object sender, RoutedEventArgs e)
        {
            if (this.Frame != null)
                this.Frame.Navigate(typeof(MasterPage));
        }

        private void GridView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var element = (SingolaDomanda)((GridView)sender).SelectedItem;
            if (element == null)
                return;
            GridSingolaDomanda.DataContext = element;
            Grid1.DataContext = element.ElencoRisposte[0];
            Grid2.DataContext = element.ElencoRisposte[1];
            Grid3.DataContext = element.ElencoRisposte[2];
            Grid4.DataContext = element.ElencoRisposte[3];
        }

        private void BtnBacheca_Click(object sender, RoutedEventArgs e)
        {
            if (PopupBacheca.IsOpen)
                return;
            PopupBacheca.Child = new Bacheca(this);
            PopupBacheca.IsOpen = true;
        }

        private void mail_Click(object sender, RoutedEventArgs e)
        {
            if (PopupBacheca.IsOpen)
                return;
            PopupBacheca.Child = new InvioSuggerimento(this);
            PopupBacheca.IsOpen = true;
        }

        private void BtnListaRisultati_Click(object sender, RoutedEventArgs e)
        {
            if (this.Frame != null)
                this.Frame.Navigate(typeof(ListaRisultati));
        }

        #endregion
    }
}